/*******************************************************************************
 * Copyright (c) 2013-2017 Lorenzo Bettini.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   Lorenzo Bettini - Initial contribution and API
 *******************************************************************************/

/*
 * generated by Xtext
 */
package org.eclipse.xsemantics.dsl

import org.eclipse.xsemantics.dsl.generator.XsemanticsGeneratorConfigProvider
import org.eclipse.xsemantics.dsl.generator.XsemanticsOutputConfigurationProvider
import org.eclipse.xsemantics.dsl.generator.XsemanticsXbaseCompiler
import org.eclipse.xsemantics.dsl.internal.parser.PatchedLookAheadPreservingNodeModelBuilder
import org.eclipse.xsemantics.dsl.typing.XsemanticsTypeComputer
import org.eclipse.xsemantics.dsl.validation.XsemanticsXExpressionHelper
import org.eclipse.xtext.generator.IOutputConfigurationProvider
import org.eclipse.xtext.generator.OutputConfigurationProvider
import org.eclipse.xtext.nodemodel.impl.NodeModelBuilder
import org.eclipse.xtext.xbase.compiler.IGeneratorConfigProvider
import org.eclipse.xtext.xbase.compiler.XbaseCompiler
import org.eclipse.xtext.xbase.typesystem.computation.ITypeComputer
import org.eclipse.xtext.xbase.util.XExpressionHelper

/** 
 * Use this class to register components to be used at runtime / without the Equinox extension registry.
 */
class XsemanticsRuntimeModule extends AbstractXsemanticsRuntimeModule {
	override Class<? extends ITypeComputer> bindITypeComputer() {
		return XsemanticsTypeComputer
	}

	def Class<? extends IOutputConfigurationProvider> bindIOutputConfigurationProvider() {
		return XsemanticsOutputConfigurationProvider
	}

	def Class<? extends OutputConfigurationProvider> bindOutputConfigurationProvider() {
		return XsemanticsOutputConfigurationProvider
	}

	def Class<? extends IGeneratorConfigProvider> bindIGeneratorConfigProvider() {
		return XsemanticsGeneratorConfigProvider
	}

	def Class<? extends XExpressionHelper> bindXExpressionHelper() {
		return XsemanticsXExpressionHelper
	}

	def Class<? extends XbaseCompiler> bindXbaseCompiler() {
		return XsemanticsXbaseCompiler
	}

	override Class<? extends NodeModelBuilder> bindNodeModelBuilder() {
		return PatchedLookAheadPreservingNodeModelBuilder
	}
}
